import { defineStore } from 'pinia'
import { store } from '/@/store'
import type { AxiosResponse } from 'axios'
import type { Res } from '/@/tool/Res'
import type { Param } from '/@/tool/Param'

import cronJobService from '/@/api/cn/core/cron/cronJobService'

import type { CronJob } from '/@/model/cn/core/cron/eo/CronJob'
import type { CronJobQO } from '/@/model/cn/core/cron/qo/CronJobQO'
import type { CronJobVO } from '/@/model/cn/core/cron/vo/CronJobVO'

interface CronJobState {
}

export const useCronJobStore = defineStore({
  id: 'cronJob',
  state: (): CronJobState => ({
  }),
  getters: {
  },
  actions: {
    save(param: Param<CronJob>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.save(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    saveBatch(param: Param<CronJob>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.saveBatch(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    update(param: Param<CronJob>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.update(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    updateBatch(param: Param<CronJob>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.updateBatch(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    remove(param: Param<CronJob>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.remove(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    removeBatch(param: Param<CronJob>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.removeBatch(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    count(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.count(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    pk(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.pk(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    query(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.query(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    paging(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.paging(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    countVo(param: Param<CronJobQO>): Promise<Res<CronJobVO>> {
      return new Promise<Res<CronJobVO>>((resolve, reject) => {
        cronJobService.countVo(param).then((res: AxiosResponse<Res<CronJobVO>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    pkVo(param: Param<CronJobQO>): Promise<Res<CronJobVO>> {
      return new Promise<Res<CronJobVO>>((resolve, reject) => {
        cronJobService.pkVo(param).then((res: AxiosResponse<Res<CronJobVO>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    queryVo(param: Param<CronJobQO>): Promise<Res<CronJobVO>> {
      return new Promise<Res<CronJobVO>>((resolve, reject) => {
        cronJobService.queryVo(param).then((res: AxiosResponse<Res<CronJobVO>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    pagingVo(param: Param<CronJobQO>): Promise<Res<CronJobVO>> {
      return new Promise<Res<CronJobVO>>((resolve, reject) => {
        cronJobService.pagingVo(param).then((res: AxiosResponse<Res<CronJobVO>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    start(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.start(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    stop(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.stop(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
    executeOnceImmediately(param: Param<CronJobQO>): Promise<Res<CronJob>> {
      return new Promise<Res<CronJob>>((resolve, reject) => {
        cronJobService.executeOnceImmediately(param).then((res: AxiosResponse<Res<CronJob>>) => {
          resolve(res.data)
        }).catch(err => {
          reject(err)
        })
      })
    },
  },
})

export function useCronJobStoreWithout() {
  return useCronJobStore(store)
}
